<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8" />
    <title>04-浅度克隆和深度克隆</title>
</head>

<body>
    <script>
        /*
            浅度克隆和深度克隆
             浅度克隆:复制值的时候，如果数据是基本数据类型数据，就会创建一个新的值，如果是引用数据类型，就会复制该地址值
             深度克隆:复制值的时候，如果数据是基本数据类型数据，就会创建一个新的值，如果是引用数据类型，也会创建一个新值
        */
        //    var a = 10;
        //    var b = a
        // var a = {
        //     name: 'tom'
        // }
        // var b = a
        // b.name = '小花'

        function getType(target) {
            return Object.prototype.toString.call(target).slice(8, -1)
        }

        let obj = {
            name: 'tom',
            age: 20,
            firends: {
                name: '小芳',
                age: 18
            }
        }


        function cloneDeep(target) {
            let result;
            if (getType(target) === 'Object') {
                result = {}
            } else if (getType(target) === 'Array') {
                result = []
            } else {
                return target
            }
            for (key in target) {
                result[key] = cloneDeep(target[key])
            }
            return result
        }

        let result = cloneDeep(obj)
        result.firends.name = 'xxxxxxxxx'
        console.log(obj)
        console.log(result)

        // let obj2 = { ...obj }
        // obj2.name = 'jerry'
        // obj2.firends.name = 'aaaa'
        // console.log(obj, obj2)
    </script>
</body>

</html>